import numpy as np
import pandas as pd

# 1.基于标签选择数据.loc[]
# .loc[] 用于根据 **标签（index 和 columns）来选择数据，标签是行和列的名称。
# 你可以使用.loc[]来选择单行、多行、单列、多列，甚至是特定行和列的交集。
# 语法
# df.loc[row_indexer, column_indexer]
# row_indexer：行的标签（索引）。
# column_indexer：列的标签（列名）。
# 创建一个简单的 DataFrame
print("1.基于标签选择数据.loc[]")
data = {'A': [1, 2, 3, 4], 'B': [10, 20, 30, 40], 'C': [100, 200, 300, 400]}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3', 'row4'])
print(df)

# 基于标签选择第 2 行的所有数据
print("基于标签选择第 2 行的所有数据")
print(df.loc['row2'])
print(type(df.loc['row2']))

# 基于标签选择第 2 行和第 3 行的数据 (注意两种方式的区别)
print("基于标签选择第 2 行和第 3 行的数据")
print(df.loc[['row2', 'row3']])
print(df.loc['row2':'row3'])

# 基于标签选择第 2 行的 A 和 C 列的数据
print("基于标签选择第 2 行的 A 和 C 列的数据")
print(df.loc['row2', ['A', 'C']])

# 基于标签选择第 2 行到第 3 行的 A 和 B 列的数据
# 切片：.loc[] 支持标签切片，'row2':'row3' 会选择从 row2 到 row3 的所有行数据，包括边界行。
print("基于标签选择第 2 行到第 3 行的 A 和 B 列的数据")
print(df.loc['row2':'row3', ['A', 'B']])
print(df.loc[['row2','row3'], ['A', 'B']])
print("------------------------------------------------------")